package com.hyhy.hycloud.uaa;

import com.hyhy.hycloud.commons.exception.HyCloudErrorDescription;
import lombok.Getter;

/**
 * UAA错误类型
 *
 * @author Xuegui Yuan
 * @date 2018-09-19
 */
public enum UaaErrorType implements HyCloudErrorDescription {

    /**
     * 用户不存在
     */
    USER_NOT_FOUND("001"),

    /**
     * 账户或密码错误
     */
    ACCOUNT_PASSWORD_ERROR("002"),

    /**
     * 用户被禁用
     */
    USER_DISABLED_ERROR("003", "您的账号已停用，请联系管理员"),

    USER_NOT_EFFECTIVE_ERROR("010", "您的账号未生效，请联系管理员"),

    USER_EXPIRED_ERROR("011", "您的账号已失效，请联系管理员"),

    /**
     */
    UNAUTHORIZED_ERROR("004"),

    /**
     * 无效访问令牌
     */
    INVALID_TOKEN_EXCEPTION("005"),

    /**
     * 旧密码输入错误
     */
    BAD_PASSWORD_ERROR("006"),

    /**
     * 新密码与旧密码相同
     */
    OLD_NEW_PASSWORD_EQUALS("007"),

    /**
     * 无应用权限
     */
    NO_APP_PERMISSION("008"),

    /**
     * 用户登录错误次数超限
     */
    LOGIN_FAILURE_LIMIT("009"),

    /**
     * 机构不存在
     */
    ORG_NOT_FOUND("100"),

    /**
     * 验证码错误或已失效
     */
    BAD_VERIFICATION_CODE("101"),

    /**
     * 验证码无效
     */
    EXPIRED_CODE("102"),

    /**
     * OpenId未绑定
     */
    OPENID_UNBIND_ERROR("201"),

    /**
     * OpenId绑定失败
     */
    OPENID_BIND_ERROR("202"),

    /**
     * 手机号已绑定
     */
    MOBILE_BINDED_ERROR("203"),

    /**
     * 请求签名错误
     */
    BAD_REQUEST_SIGNATURE_ERROR("301"),

    /**
     * 业务TOKEN过期错误
     */
    BIZ_TOKEN_EXPIRED_ERROR("302");

    @Getter
    private String errorCode;

    @Getter
    private String message;

    UaaErrorType(String errorCode) {
        this.errorCode = Constants.APP_ID + errorCode;
        this.message = this.name().replaceAll("_", " ").toLowerCase();
    }

    UaaErrorType(String errorCode, String message){
        this.errorCode = Constants.APP_ID + errorCode;
        this.message = message;
    }

    public UaaRuntimeException toRuntimeException() {
        return new UaaRuntimeException(this);
    }
}
